import general.CFGLodader;
import general.OSDetection;

import java.net.ServerSocket;
import java.net.Socket;

import smtp_package.smtpServer;

public class Server {

	/**
	 * @author Andrea Santos
	 * @author Cristovao Rufino
	 * @author Fellipe Tenorio
	 * 
	 * Servidor do projeto de Redes 1
	 */

	/*
	 * Para que essa funcao execute corretamente e necessario a chamada
	 * das funcoes CFGLoader.CFGLoader() e OSDetection.getOS().
	 */
	
	public static void main(String[] args) {
	
		int ret, os_type;
		
		//Carrega as configuracoes como estao no arquivo server.cfg
		ret = CFGLodader.CFGLoader();
		if(ret != CFGLodader.OK){
			System.out.println("Erro! Nao foi possivel carregar o arquivo de congfiguracao!");
			System.exit(0);
		}
		
		//Pega o nome do sistema operacional que esta sendo executado
		os_type = OSDetection.getOS();
		
		if(os_type == OSDetection.UNKNOWN_OS){
			System.out.println("O servidor esta sendo executado num sistema operacional desconhecido.\n" +
					"Por razoes de compatibilidade a execucao sera terminada");
			System.out.println("Grato por usar!");
			System.exit(0);
		}

		ServerSocket smtpserver;
		int smtp_port = CFGLodader.SMTP_DEFAULT_PORT; //Carrega a porta padrao do CFG
		
		System.out.println("Abrindo a porta " + smtp_port + "...");
		
		try {
		
			smtpserver = new ServerSocket(smtp_port);
			while (true) {
				//Aguarda uma conexão no "server", aceita e abre num Socket
				System.out.println("Ouvindo na porta " + smtp_port + "...");
				Socket socket = smtpserver.accept();
				
				//Parte que da suporte ao Multi threading
				smtpServer myServ = new smtpServer( socket );
				new Thread( myServ ).start(); //Inicia a thread do SMTP
				
				/*
				 * OBSERVACAO!
				 * Criar as linhas para o servidor de POP3 
				 */
				
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}	
	
}

